1 背景说明
Attention,也叫注意力模型,关于 Attention,这篇文章中有详细的描述。Attention 在计算机视觉、自然语言处理中都有典型的应用。因为 Attention 能够学习到不同特征对于目标的重要程度,目前的研究结果表明,Attention 在绝大多数场景中都能发挥积极作用。
Attention FM(后文简称 AFM)正是在原有 FM 基础上,考虑了不同二阶交叉特征对于目标的重要程度,实验结果表明,AFM 性能明显要优于 FM 及 FM 的衍生版本。下面我们就来探索下 AFM 原理。
2 AFM 模型结构及原理
2.1 AFM 模型结构
FM 模型结构及原理这里就不再讲解,不了解的参考这篇,AFM 结构如下图所示:
上面这张模型图省去了 FM 模型中的线性部分。只考虑二阶交叉部分,这部分又分为两层:Pair-wise Interaction Layer 和 Attention-based Pooling Layer。
2.2 Pair-wise Interaction Layer
FM 中使用特征对应隐向量的内积来表示两个特征之间的关联程度,受到这个启发,作者提出了一个新的 Pair-wise Interaction 层(以下简称 PI 层),它将 mmm 个交叉向量扩展到 m(m−1)/2m(m−1)/2m(m-1)/2 个交叉向量,每一个交叉向量都是由原始隐向量的 element-wise product(元素积)来表示,Pair-wise Interaction 层的输出结果为:
其中 vi⨀vjvi⨀vj\boldsymbol{v}_i\bigodot\boldsymbol{v}_j 表示两个向量的元素积,不知道元素积的可自行搜索下,因为这一步表示非常关键。其中,
Rx={(i,j)}i∈χ,j∈χ,j>iRx={(i,j)}i∈χ,j∈χ,j>iRx={(i,j)}{i\in\chi,j\in\chi,j>i}
如果将 PI 层的结果直接输出做预测,那么预测得分表达式为:
这里提醒一点,vi⨀vjvi⨀vj\boldsymbol{v}_i\bigodot\boldsymbol{v}_j 的结果是一个向量,xixjxixjx_ix_j 是一个数值,因此有 pT∈RkpT∈Rk\boldsymbol{p}^T\in{R^k},b∈Rb∈Rb\in{R},即 pTpT\boldsymbol{p}^T 是一个向量,bbb 是一个实数值。
并且,并且,并且,重要的地方说三遍,当 pT=[1,1,…,1],b=0pT=[1,1,…,1],b=0\boldsymbol{p}^T=[1,1,…,1],b=0 是,PI 层就退化为 FM!这一点需要特别注意。
2.3 Attention-based Pooling Layer
接下来就是重点啦,Attention 层!Attention 的思想就是不同的部分对结果的贡献程度不一样!我们知道,FM 中并没有考虑这种重要程度,受此启发,基于 Attention 的 FM 应运而生。
上图其实有一定的迷惑性,PI 层和 Attention-based Pooling 之间的直线连接表示不经过 Attention 直接输出,也就是 2.2 节中的描述。PI 层经过 Attention Net,最终形成系数 $a{ij},然后再求和输出,这才是 Attention 部分,也就是说,Attention 部分目的就是求出不同交叉项的系数,然后再求和输出,这才是 Attention 部分,也就是说,Attention 部分目的就是求出不同交叉项的系数,然后再求和输出,这才是Attention部分,也就是说,Attention部分目的就是求出不同交叉项的系数a{ij}$(重要程度),因此,经过 Attention 的输出为:
接下来的问题就是,$a{ij} 如何获取?一个最简单的思路就是,直接将如何获取?一个最简单的思路就是,直接将如何获取?一个最简单的思路就是,直接将a{ij} 当做超参数,参与训练,通过迭代直接求取。但是这样会有一个问题:对于没有共现的特征,当做超参数,参与训练,通过迭代直接求取。但是这样会有一个问题:对于没有共现的特征,当做超参数,参与训练,通过迭代直接求取。但是这样会有一个问题:对于没有共现的特征,a_{ij}$ 就无法获取了。
其实在这篇文章中,看图说话那部分,求 Attention 系数有异曲同工之妙,个人感觉作者是借鉴了 paper 中获取系数的方式。总之,求系数很简单,一层 MLP 就可以!也就是 PI 到 Attention Net 其实就是一层 MLP:
这样做就避免了没有共现的特征无法求系数的问题。到了这一步,Attention 部分的输出就很简单了:
以上就是 AFM 模型结构和原理,到这里我想大家基本上就都能明白啦!
2.4 AFM 学习过程
AFM 通过设置不同的目标函数,能够适用于多种任务:分类问题,回归问题等。对于推荐系统或者 CTR 预估,一般采用 square loss:
同样为了避免过拟合问题,作者在 MLP 那一层使用了 L2L2L_2 正则,还提到了这里没有用 dropout 是因为模型稳定性和性能问题,那么最终的目标函数为:
可以看出,对比其他的模型,AFM 性能在不同程度上都有一定提升!笔者好奇的是,作者在提出 AFM 之前不久,提出了 NFM,这里并没有对 NFM 和 AFM 性能做对比,不知道是什么原因,哈哈!另外一点比较好奇的是,作者这两篇文章都没有对比 AUC 这个最重要的性能,都是之比较 RMSE,不知道是基于什么原因,暂且保留这个疑问吧!
2.5 开源实现
作者还是非常好的,NFM 和 AFM 都给出了开源实现,这个就非常良心啦,不用再造轮子啦!https://github.com/hexiangnan/attentional_factorization_machine
3 总结
个人认为,这篇文章的创新点有两个:(1)PI 层的提出,有了 PI 层,其实还可以基于 PI 做些其他的事情;(2)首次将 Attention 思想应用在 CTR 预估上。不得不佩服作者的嗅觉和灵活应用能力!